package com.csap.framework.oauth2.server.service;

import com.csap.framework.annotation.apidoc.Description;
import com.csap.framework.oauth2.server.entity.UserOpenInfoEntity;
import com.csap.framework.oauth2.server.model.UserOpenInfoModel;
import com.csap.mybatisplus.extension.service.BaseCsapService;

/**
 * <p>
 * 用户开放的相关信息
 * </p>
 *
 * @author yangchengfu
 * @dateTime 2021-07-27 10:03:58
 */
@Description(value = "用户开放的相关信息Service")
public interface UserOpenInfoService extends BaseCsapService<UserOpenInfoEntity, UserOpenInfoModel, Long> {

    String OPEN_LOCK_KEY = ":openLock:%s:%s";

    /**
     * 查找是否绑定了openId
     *
     * @param clientId 客户端ID
     * @param loginId  登录标识
     * @return openID
     */
    String containsOpenId(String clientId, String loginId);

    /**
     * 获取客户端用户的标识
     *
     * @param clientId 客户端的ID
     * @param loginId  用户登录的ID
     * @return opendId
     */
    String getOpenId(String clientId, String loginId);

    /**
     * 获取用户ID
     *
     * @param clientId 客户端ID
     * @param openId   openId
     * @return 用户ID
     */
    String getUserId(String clientId, String openId);

    /**
     * 根据openId删除
     *
     * @param openId openId
     * @param userId userid
     * @return 是否删除成功
     */
    default boolean removeByOpenId(String openId, String userId) {
        return lambdaUpdate().eq(true, UserOpenInfoEntity::getOpenId, openId).eq(true, UserOpenInfoEntity::getUserId, userId).remove();
    }
}
